<?php

require_once 'Framework/Controller/Action.php';

/**
 * Авторизированный пользователь в системе
 *
 */
class HomeController extends Framework_Controller_Action
{
    /**
     * Я
     *
     * @var obj User_Self
     */
    private $_user;
    
    const ROOM = 10;
    
    public function init()
    {
        // Если не авторизирован то пшел вон
        if (!$this->session->get('logged_in')) {
            $this->_redirect('/user/login/');
        }
        $this->_user = new User_Self($this->session->get('user_id'));
        $this->view->messages_count = $this->_user->getNewMessagesCount();
       // phpinfo();
    }
    
    /**
     * Домашня страница
     *
     */
    public function indexAction()
    {
        //Зачищаем юзера в комнатах
        Room::clean($this->_user->getUserId());

        // Голосование
        $rating = get_value($this->getRequest()->getQuery('rating'));

        // Юзер за которого голосуем
        $user = $this->session->get('rating_user');

        if (is_numeric($rating) && $this->_checkRating($user, $rating)) { // голосуем

            $this->_user->vote($user, $rating);
            $voted_data = User_Another::getHomeUserId($user);
            $this->view->voted_data = $voted_data;
            $this->view->voted = $rating;
            $this->view->others_voted = $this->_user->isVote($user);
           // $this->_redirect('/home/');
        } 
	    $voting_data = User_Another::getHomeUser($this->_user->getUserId());
	    if (sizeof($voting_data)) { // Есть за кого голосовать
	    	$this->view->voting_data = $voting_data;
	    	$this->view->show = 1;
	        $this->session->set('rating_user', sizeof($voting_data) ? $voting_data['user_id'] : null);
	    } else { // За всех проголосовал
	      	$this->view->voting_data = $this->_user->getLastVotingUser();
	       	$this->session->set('rating_user', false);
	    }
        $this->render();
    }
    
    /**
     * Комната
     *
     */
    public function roomAction()
    {
        $room = new Room($this->_getParam('0'));
        
        // Доступ к комнате запрещен
        if (!$room->isUserAccess($this->_user->getUserId())) {
            $this->_redirect('/index/error/');
        }
        $this->session->set('room_id', $room->room_id);
        //TODO Добавлять юзера нужно только при заходе в чат
        $room->addUser($this->_user);
        
        if ($this->getRequest()->getMethod() != 'POST') {
            $this->view->block = $this->session->get('block');
            $this->session->set('block', 0);
            $page = $this->_getParam(1, 0);
            $smiles = Framework_Registry::isRegistered('smiles') ? Framework_Registry::get('smiles') : true;
            $messages = $room->getRoomMessages(self::ROOM, $page, $paging, $smiles);       
            $this->view->paging    = $paging;
            $this->view->page      = $page;
            $this->view->messages  = $messages;
            $this->view->room_name = $room->room_name;
            $this->view->room_id   = $room->room_id;
        } else {
            // Добавляем только если пользователь не заблокирован
            $data = $this->_user->getAllData();
            if ($data['block'] - time() < 0) {
                $message  = $this->getRequest()->message;
                $room->addMessage($this->_user->getUserId(), $message);
            } else {
                $this->session->set('block', 1);
            }
            $this->_redirect('/home/room/' . $room->room_id . '/');
        }
        
        $this->render();
    }

    /**
     * Сообщение в комнату
     *
     */
    public function writeAction()
    {
        $this->view->room_id = $this->session->get('room_id');
        
        $this->render();
    }
    
    /**
     * Список комнат
     *
     */
    public function roomsAction()
    {
        // Зачищаем юзера в комнатах
        Room::clean($this->session->get('user_id'));
        // Зачищаем зомби
        Room::cleanOnline();

        $rooms = Room::getUserRooms($this->_user->getUserId());
        $this->view->rooms = $rooms;
        
        $this->render();
    }

    /**
     * top10
     *
     */
    public function topAction()
    {
        $top = User_Another::getTopUsers();
        $this->view->top = $top;

        $this->render();
    }
    
    /**
     * Помощь (просто страничка)
     *
     */
    public function helpAction()
    {
        $this->render();
    }
    
    public function infoAction()
    {
        $this->render();
    }
    
    /**
     * Валидатор рейтинга
     *
     * @param int $user_id
     * @param int $rating
     * @return bool
     */
    private function _checkRating($user_id, $rating)
    {
        $error = false;
        if ($rating === '') $rror = true;
        if ($rating < 0 || $rating > 10) $error = true;
        if (!($user = User_Another::findLoginByUserId($user_id))) $error = true;
        
        return $error ? false : true;
    }
}